// 字面量 变量
// 1 32 true false '哈哈'
// 变量
// let a = 10;

// 字面量
let b:12;
b = 12;
// b = 13;

// 字面量的运算
// 逻辑运算符：&&  ||  ！
let c:1|3|5;
c = 1;
c = 3;
// c = 2;

/**
 * any  隐形写法
 * let xxx:any 显性写法
 * 如果给变量赋值any 相当于把该变量关闭了ts的校验
 */
let d:any;
d = 0;
d = 'hi';
d = false;
d = undefined;

// unknown未知类型
// 可以被任何类型赋值
let e:unknown;
e = 98;
e = 'hi';
e = false;
d = e;

let f:string = '12';
// f = e;

/**
 * any 与 unknown区别
 * any 可以给任意类型进行复制
 * unknown 不可以给任意类型进行赋值 只能给any进行赋值
 */
// f = d;
// f = e;

if(typeof f == 'string') {
    console.log('是字符串')
}


// 类型断言(不就是强制类型转换吗)
f = <string>d;
f = d as string;


// void 表示返回的类型是空
// function fn1():void {
//     // return 1;
//     console.log(1)
// }
// fn1()
// console.log(fn1(),'fn1()')

// never 用来表示永远不返回的类型 不允许返出任何结果  只能用来返回报错
function fn2():never {
    // return 1;
    // console.log(1)
    throw new Error("报错")
}
fn2();

// export{};